// utils/device.js

/**
 * 生成由数字和英文字母（大小写）组成的随机字符串
 * @param {number} length - 随机串长度，默认20
 */
function generateRandomString(length = 20) {
    let result = '';
    // 字符池：包含数字、小写字母、大写字母
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    const charsLength = characters.length;
    for (let i = 0; i < length; i++) {
        // 随机选取字符池中的字符
        result += characters.charAt(Math.floor(Math.random() * charsLength));
    }
    return result;
}

/**
 * 获取带平台前缀的设备号（格式：前缀+纯数字字母随机串）
 * - H5: h-xxxx
 * - Android App: a-xxxx
 * - iOS App: i-xxxx
 */
export function getDeviceId() {
    const DEVICE_ID_KEY = 'uni_device_id'; // 本地存储的key
    let deviceId = uni.getStorageSync(DEVICE_ID_KEY);

    // 已存在且格式正确则直接返回
    if (deviceId && (deviceId.startsWith('h-') || deviceId.startsWith('a-') || deviceId.startsWith('i-'))) {
        return deviceId;
    }

    try {
        const systemInfo = uni.getSystemInfoSync();
        const platform = systemInfo.platform;
        let prefix = '';

        // 1. 根据平台设置前缀
        if (platform === 'android') {
            prefix = 'a-';
        } else if (platform === 'ios') {
            prefix = 'i-';
        } else {
            prefix = 'h-'; // H5/其他平台默认
        }

        // 2. 生成纯数字+字母的随机串（长度20）
        const randomStr = generateRandomString(20);

        // 3. 拼接前缀生成最终设备号
        deviceId = prefix + randomStr;

        // 4. 持久化到本地存储
        uni.setStorageSync(DEVICE_ID_KEY, deviceId);
        console.log(`[${platform}] 生成设备号:`, deviceId);

        return deviceId;
    } catch (e) {
        // 异常兜底（默认H5前缀）
        console.error('生成设备号失败，兜底处理:', e);
        const fallbackId = 'h-' + generateRandomString(20);
        uni.setStorageSync(DEVICE_ID_KEY, fallbackId);
        return fallbackId;
    }
}